package com.kxn.multi.module.service.service.impl;

import com.kxn.multi.module.service.entity.AdminRole;
import com.kxn.multi.module.service.mapper.AdminRoleMapper;
import com.kxn.multi.module.service.service.AdminRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.kxn.multi.module.service.util.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import com.kxn.multi.module.common.exception.ServiceException;

/**
* <p>
* 角色表 服务实现类
* </p>
*
* @author kxn
* @since 2023-04-18
*/
@Service
public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole> implements AdminRoleService {

    @Autowired
    private PageUtil pageUtil;

    /**
    * 角色表分页列表
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public IPage<AdminRole> page(AdminRole param) {

        QueryWrapper<AdminRole> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
        // 角色名称
                .eq(!StringUtils.isEmpty(param.getRoleName()), AdminRole::getRoleName, param.getRoleName())
            // 创建者，当type=2，表示主账号创建的角色
                .eq(param.getUserId() != null, AdminRole::getUserId, param.getUserId())
            // 状态，1启用，0禁用
                .eq(param.getStatus() != null, AdminRole::getStatus, param.getStatus())
            // 备注
                .eq(!StringUtils.isEmpty(param.getNote()), AdminRole::getNote, param.getNote())
    ;

        IPage<AdminRole> page = page(pageUtil.page(), queryWrapper);
        return page;
    }

    /**
    * 角色表详情
    * @param id
    * @return
    */
    @Override
    public AdminRole detail(Long id) {
        return getById(id);
    }

    /**
    * 角色表新增
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public void create(AdminRole param) {
        if (!save(param)) {
            throw new ServiceException("添加数据失败");
        }
    }

    /**
    * 角色表修改
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public void update(AdminRole param) {
        if (!updateById(param)) {
            throw new ServiceException("更新数据失败");
        }
    }

    /**
    * 角色表修改
    * @param id 主键id
    * @param param 根据需要进行传值
    * @return
    */
    public void updateById(Long id, AdminRole param) {
        AdminRole data = this.detail(id);
        if (data == null) {
            throw new ServiceException("数据不存在");
        }
        param.setId(id);
        update(param);
    }

    /**
    * 角色表删除(单个条目)
    * @param id
    * @return
    */
    @Override
    public void delete(Long id) {
        removeById(id);
    }

    /**
    * 角色表删除(多个条目)
    * @param ids
    * @return
    */
    @Override
    public void batchDelete(List<Long> ids) {
        removeByIds(ids);
    }
}
